#include "Bullet3Common/b3Transform.h"
#ifdef __cplusplus
extern "C" {
#endif
b3TransformFloatData* bullet_Newb3TransformFloatData(){
	b3TransformFloatData* wrap_out = new b3TransformFloatData();
	return wrap_out;
}

b3Matrix3x3FloatData* bullet_b3TransformFloatData_GetFieldOfM_basis(b3TransformFloatData* c_this){
	return (b3Matrix3x3FloatData*)(&c_this->m_basis);
}

b3Vector3FloatData* bullet_b3TransformFloatData_GetFieldOfM_origin(b3TransformFloatData* c_this){
	return (b3Vector3FloatData*)(&c_this->m_origin);
}

b3TransformDoubleData* bullet_Newb3TransformDoubleData(){
	b3TransformDoubleData* wrap_out = new b3TransformDoubleData();
	return wrap_out;
}

b3Matrix3x3DoubleData* bullet_b3TransformDoubleData_GetFieldOfM_basis(b3TransformDoubleData* c_this){
	return (b3Matrix3x3DoubleData*)(&c_this->m_basis);
}

b3Vector3DoubleData* bullet_b3TransformDoubleData_GetFieldOfM_origin(b3TransformDoubleData* c_this){
	return (b3Vector3DoubleData*)(&c_this->m_origin);
}

b3Transform* bullet_Newb3Transform(){
	b3Transform* wrap_out = new b3Transform();
	return wrap_out;
}

b3Transform* bullet_Newb3Transform1(b3Quaternion* q,b3Vector3* c){
	b3Quaternion const& c_arg_q=(b3Quaternion const&)(*q);
	b3Vector3 const& c_arg_c=(b3Vector3 const&)(*c);
	b3Transform* wrap_out = new b3Transform(c_arg_q,c_arg_c);
	return wrap_out;
}

b3Transform* bullet_Newb3Transform2(b3Matrix3x3* b,b3Vector3* c){
	b3Matrix3x3 const& c_arg_b=(b3Matrix3x3 const&)(*b);
	b3Vector3 const& c_arg_c=(b3Vector3 const&)(*c);
	b3Transform* wrap_out = new b3Transform(c_arg_b,c_arg_c);
	return wrap_out;
}

b3Transform* bullet_Newb3Transform3(b3Transform* other){
	b3Transform const& c_arg_other=(b3Transform const&)(*other);
	b3Transform* wrap_out = new b3Transform(c_arg_other);
	return wrap_out;
}

void bullet_b3Transform_deSerialize(b3Transform* c_this,b3TransformFloatData* dataIn){
	b3TransformFloatData const& c_arg_dataIn=(b3TransformFloatData const&)(*dataIn);
	c_this->deSerialize(c_arg_dataIn);
}

void bullet_b3Transform_deSerializeDouble(b3Transform* c_this,b3TransformDoubleData* dataIn){
	b3TransformDoubleData const& c_arg_dataIn=(b3TransformDoubleData const&)(*dataIn);
	c_this->deSerializeDouble(c_arg_dataIn);
}

void bullet_b3Transform_deSerializeFloat(b3Transform* c_this,b3TransformFloatData* dataIn){
	b3TransformFloatData const& c_arg_dataIn=(b3TransformFloatData const&)(*dataIn);
	c_this->deSerializeFloat(c_arg_dataIn);
}

b3Matrix3x3* bullet_b3Transform_getBasis(b3Transform* c_this){
	b3Matrix3x3& c_out = c_this->getBasis();
	b3Matrix3x3* wrap_out = (b3Matrix3x3*)(&c_out);
	return wrap_out;
}

b3Matrix3x3* bullet_b3Transform_getBasis1(b3Transform* c_this){
	b3Matrix3x3 const& c_out = c_this->getBasis();
	b3Matrix3x3* wrap_out = (b3Matrix3x3*)(&c_out);
	return wrap_out;
}

b3Transform* bullet_b3Transform_getIdentity(b3Transform* c_this){
	b3Transform const& c_out = c_this->getIdentity();
	b3Transform* wrap_out = (b3Transform*)(&c_out);
	return wrap_out;
}

void bullet_b3Transform_getOpenGLMatrix(b3Transform* c_this,float* m){
	b3Scalar * c_arg_m=(b3Scalar *)(void*)(m);
	c_this->getOpenGLMatrix(c_arg_m);
}

b3Vector3* bullet_b3Transform_getOrigin(b3Transform* c_this){
	b3Vector3& c_out = c_this->getOrigin();
	b3Vector3* wrap_out = (b3Vector3*)(&c_out);
	return wrap_out;
}

b3Vector3* bullet_b3Transform_getOrigin1(b3Transform* c_this){
	b3Vector3 const& c_out = c_this->getOrigin();
	b3Vector3* wrap_out = (b3Vector3*)(&c_out);
	return wrap_out;
}

b3Quaternion* bullet_b3Transform_getRotation(b3Transform* c_this){
	b3Quaternion c_out = c_this->getRotation();
	b3Quaternion* wrap_out = new b3Quaternion(c_out);
	return wrap_out;
}

b3Transform* bullet_b3Transform_inverse(b3Transform* c_this){
	b3Transform c_out = c_this->inverse();
	b3Transform* wrap_out = new b3Transform(c_out);
	return wrap_out;
}

b3Transform* bullet_b3Transform_inverseTimes(b3Transform* c_this,b3Transform* t){
	b3Transform const& c_arg_t=(b3Transform const&)(*t);
	b3Transform c_out = c_this->inverseTimes(c_arg_t);
	b3Transform* wrap_out = new b3Transform(c_out);
	return wrap_out;
}

b3Vector3* bullet_b3Transform_invXform(b3Transform* c_this,b3Vector3* inVec){
	b3Vector3 const& c_arg_inVec=(b3Vector3 const&)(*inVec);
	b3Vector3 c_out = c_this->invXform(c_arg_inVec);
	b3Vector3* wrap_out = new b3Vector3(c_out);
	return wrap_out;
}

void bullet_b3Transform_mult(b3Transform* c_this,b3Transform* t1,b3Transform* t2){
	b3Transform const& c_arg_t1=(b3Transform const&)(*t1);
	b3Transform const& c_arg_t2=(b3Transform const&)(*t2);
	c_this->mult(c_arg_t1,c_arg_t2);
}

void bullet_b3Transform_serialize(b3Transform* c_this,b3TransformFloatData* dataOut){
	b3TransformFloatData& c_arg_dataOut=(b3TransformFloatData&)(*dataOut);
	c_this->serialize(c_arg_dataOut);
}

void bullet_b3Transform_serializeFloat(b3Transform* c_this,b3TransformFloatData* dataOut){
	b3TransformFloatData& c_arg_dataOut=(b3TransformFloatData&)(*dataOut);
	c_this->serializeFloat(c_arg_dataOut);
}

void bullet_b3Transform_setBasis(b3Transform* c_this,b3Matrix3x3* basis){
	b3Matrix3x3 const& c_arg_basis=(b3Matrix3x3 const&)(*basis);
	c_this->setBasis(c_arg_basis);
}

void bullet_b3Transform_setFromOpenGLMatrix(b3Transform* c_this,float* m){
	b3Scalar const * c_arg_m=(b3Scalar const *)(void*)(m);
	c_this->setFromOpenGLMatrix(c_arg_m);
}

void bullet_b3Transform_setIdentity(b3Transform* c_this){
	c_this->setIdentity();
}

void bullet_b3Transform_setOrigin(b3Transform* c_this,b3Vector3* origin){
	b3Vector3 const& c_arg_origin=(b3Vector3 const&)(*origin);
	c_this->setOrigin(c_arg_origin);
}

void bullet_b3Transform_setRotation(b3Transform* c_this,b3Quaternion* q){
	b3Quaternion const& c_arg_q=(b3Quaternion const&)(*q);
	c_this->setRotation(c_arg_q);
}

#ifdef __cplusplus
}
#endif
